#include <iostream>
#include <fstream>
#include "TextQuery.h"
#include "QueryResult.h"
#include "Query.h"
#include "AndQuery.h"
#include "NotQuery.h"
#include "OrQuery.h"
using std::cout;
using std::cin;
using std::cerr;
using std::endl;

/**
 * @debug 这里记录一个debug，win上移动文件后云上需要对应操作否则会报莫名其妙的bug
 * @param infile
 */
void runQueries(ifstream &infile) {
//    读一次文件
    TextQuery textQuery(infile);

//    此处只是建立关系，并未做真正的查询，（此处可能是移动构造？待证实）
    /**
     * Query中有QueryBase指针，再复杂的表达式最终可以化为两个值，那么返回BaseQuery对应的子类
     */
    Query q = ~Query("that") & Query("chaldeans") & Query("depart") & Query("shall");
//    NOTICE 这里一行出现多次算的是一次因为set默认去重，输出的不是总共出现的次数
    cout << q.eval(textQuery);
}
/**
 * 疑点一：重载运算符函数为什么只能放在一个文件里？
 * 优化一：TextQuery预留空间，避免重复拷贝
 * @return
 */
int main(void) {
    ifstream file;
    file.open("../The_Holy_Bible.txt");
    if(!file){
        cerr << "file open file failed" << endl;
        exit(-1);
    }

    runQueries(file);

    file.close();

    return 0;
}
